package cn.funeralobjects.upms.repository;

import cn.funeralobjects.common.repository.CommonCloudRepository;
import cn.funeralobjects.upms.entity.ELoginUser;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

/**
 * @author FuneralObjects
 * Create date: 2019-08-14 16:42
 */
public interface LoginUserRepository extends CommonCloudRepository<ELoginUser, Integer> {

    /**
     * 通过userId和delSalt查询登陆用户
     *
     * @param userId  用户Id
     * @param delSalt 删除盐
     * @return 登陆信息
     */
    List<ELoginUser> findAllByUserIdAndDelSalt(Integer userId, Integer delSalt);

//    /**
//     * 通过登录名和delSalt判断是否存在重复对象
//     *
//     * @param name 登陆名
//     * @param delSalt   删除盐
//     * @return true - 存在
//     */
//    boolean existsAllByNameAndDelSalt(String name, Integer delSalt);
//
//    /**
//     * 是否存在登陆名
//     *
//     * @param name 登陆名
//     * @param id        被排除的id
//     * @param delSalt   删除盐
//     * @return true - 存在
//     */
//    boolean existsAllByNameAndIdNotAndDelSalt(String name, Integer id, Integer delSalt);
//
//    /**
//     * 通过登录名，密码和delSalt查询用户
//     *
//     * @param name 登录名
//     * @param password  密码
//     * @param delSalt   删除盐
//     * @return 查询结果
//     */
//    Optional<ELoginUser> findByNameAndPasswordAndDelSalt(String name, String password, Integer delSalt);

    /**
     * 通过登录名，delSalt查找用户
     *
     * @param name    登陆名
     * @param delSalt 删除标记
     * @return 查找结果
     */
    Optional<ELoginUser> findByNameAndDelSalt(String name, Integer delSalt);

//    /**
//     * 根据用户id更新密码
//     *
//     * @param password 密码
//     * @param userId   用户id
//     * @param delSalt  删除盐
//     */
//    @Modifying
//    @Query("UPDATE ELoginUser SET password = :password WHERE userId = :userId AND delSalt = :delSalt")
//    void updatePasswordByUserIdAndDelSalt(String password, Integer userId, Integer delSalt);

    /**
     * 更新密码
     *
     * @param password 密码
     * @param name     登录名
     * @param delSalt  删除盐
     */
    @Modifying
    @Query("UPDATE ELoginUser SET password = :password WHERE name = :name AND delSalt = :delSalt")
    void updatePasswordByNameAndDelSalt(String password, String name, Integer delSalt);

    /**
     * 更新enable状态值
     *
     * @param enable  enable状态值
     * @param name    登录名
     * @param delSalt 删除盐
     */
    @Modifying
    @Query("UPDATE ELoginUser SET enable = :enable WHERE name = :name AND delSalt = :delSalt")
    void updateEnableByNameInAndDelSalt(boolean enable, String name, Integer delSalt);

//    /**
//     * 更新enable状态值
//     *
//     * @param enable     enable这状态值
//     * @param names 登录名集合
//     * @param delSalt    删除盐
//     */
//    @Modifying
//    @Query("UPDATE ELoginUser SET enable = :enable WHERE name in :names AND delSalt = :delSalt")
//    void updateEnableByNamesInAndDelSalt(boolean enable, Collection<String> names, Integer delSalt);

    /**
     * 更新enable状态值
     *
     * @param enable  enable状态值
     * @param userIds 用户id集合
     * @param delSalt 删除盐
     */
    @Modifying
    @Query("UPDATE ELoginUser SET enable = :enable WHERE userId in :userIds AND delSalt = :delSalt")
    void updateEnableByUserIdsInAndDelSalt(boolean enable, Collection<Integer> userIds, Integer delSalt);

    /**
     * 更行enable状态值
     *
     * @param enable  enable状态值
     * @param userId  用户id
     * @param delSalt 删除盐
     */
    @Modifying
    @Query("UPDATE ELoginUser SET enable = :enable WHERE userId = :userId AND delSalt = :delSalt")
    void updateEnableByUserIdInAndDelSalt(boolean enable, Integer userId, Integer delSalt);


}
